﻿using InterviewAppPhone.Managers;
using LibQuestionIsPhone.Models;
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;

namespace InterviewAppPhone.ViewModels
{
    public class SuggerisciDomandaViewModel : BaseViewModel, INotifyPropertyChanged
    {
        public event EventHandler VMesitoPropostaDomanda;

        #region Attributi di classe

        public ObservableCollection<TipologiaTest> ListaTipologie { get; set; }

        private TipologiaTest _tipologiaSelezionata;

        public TipologiaTest TipologiaSelezionata
        {
            get { return _tipologiaSelezionata; }
            set
            {
                _tipologiaSelezionata = value;
                if (ListaTipologie.First().IDTest == -1)
                    ListaTipologie.RemoveAt(0);
                OnPropertyChanged("TipologiaSelezionata");
                OnPropertyChanged("IsOk");
            }
        }

        private string _domanda;

        public string Domanda
        {
            get { return _domanda; }
            set
            {
                _domanda = value;
                OnPropertyChanged("Domanda");
                OnPropertyChanged("IsOk");
            }
        }

        private string _rispostaCorretta;

        public string RispostaCorretta
        {
            get { return _rispostaCorretta; }
            set
            {
                _rispostaCorretta = value;
                OnPropertyChanged("RispostaCorretta");
                OnPropertyChanged("IsOk");
            }
        }

        private string _rispostaSbagliata1;

        public string RispostaSbagliata1
        {
            get { return _rispostaSbagliata1; }
            set
            {
                _rispostaSbagliata1 = value;
                OnPropertyChanged("RispostaSbagliata1");
                OnPropertyChanged("IsOk");
            }
        }

        private string _rispostaSbagliata2;

        public string RispostaSbagliata2
        {
            get { return _rispostaSbagliata2; }
            set
            {
                _rispostaSbagliata2 = value;
                OnPropertyChanged("RispostaSbagliata2");
                OnPropertyChanged("IsOk");
            }
        }

        private string _rispostaSbagliata3;

        public string RispostaSbagliata3
        {
            get { return _rispostaSbagliata3; }
            set
            {
                _rispostaSbagliata3 = value;
                OnPropertyChanged("RispostaSbagliata3");
                OnPropertyChanged("IsOk");
            }
        }

        #endregion

        #region Abbributi logici

        //        private bool _isOk;

        public bool IsOk
        {
            get
            {
                //return _isOk;
                if ((TipologiaSelezionata != null) &&
                    (!string.IsNullOrEmpty(Domanda)) &&
                    (!string.IsNullOrEmpty(RispostaSbagliata1)) &&
                    (!string.IsNullOrEmpty(RispostaSbagliata2)) &&
                    (!string.IsNullOrEmpty(RispostaSbagliata3)))
                    return true;
                return false;
            }
            //            set { _isOk = value; }
        }


        #endregion

        public SuggerisciDomandaViewModel()
        {
            ListaTipologie = Tipologie;
            ListaTipologie.Insert(0, new TipologiaTest() { IDTest = -1, NomeTest = "Scegli una tipologia" });
        }


        #region Metodi

        internal void ClearData()
        {
            Domanda = "";
            RispostaCorretta = "";
            RispostaSbagliata1 = "";
            RispostaSbagliata2 = "";
            RispostaSbagliata3 = "";
        }

        internal void InviaDomanda()
        {
            IsCalculate = true;
            var mproposta = new MProposta();
            mproposta.EsitoInvioDomanda_Event += mproposta_EsitoInvioDomanda_Event;
            mproposta.ProponiDomanda(TipologiaSelezionata.IDTest, Domanda, RispostaCorretta, RispostaSbagliata1, RispostaSbagliata2, RispostaSbagliata3);

        }

        private void mproposta_EsitoInvioDomanda_Event(object sender, System.EventArgs e)
        {
            if ((bool)sender)
            {
                ClearData();
                if (VMesitoPropostaDomanda != null)
                    VMesitoPropostaDomanda(true, null);
            }
            else
                if (VMesitoPropostaDomanda != null)
                    VMesitoPropostaDomanda(false, null);

            IsCalculate = false;
        }

        #endregion


        public override event PropertyChangedEventHandler PropertyChanged;
        public override void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(name));
        }


    }
}
